package com.jucai.pppeiyouclient.http;

import android.content.Context;

import org.json.JSONObject;

import java.util.List;
import java.util.Map;

/**
 * 网络请求对象
 */
public class RequestObject {
    /**
     * 上下文,用于获取 httpclient
     */
    private Context context;

    /**
     * 请求路径,不带参数
     */
    private String url;

    private String urlParams;

    /**
     * 是否带上 cookie ,默认 true
     */
    private boolean withCookie = true;

    /**
     * 简单参数,以后会过时，建议使用 extraParams
     * 请求参数,如果 get 请求已经把参数写在了 url 上，可以传 null 或者空 map
     */
    private Map<String, String> simpleParams;

    /**
     * 额外参数
     */
    private List<String[]> extraParams;

    /**
     * 回调参数,默认为空
     */
    private String callbackParam;

    /**
     * 成功请求后，是否保存 cookie ,默认 true
     */
    private boolean updateCookie = true;

    /**
     * 请求类型：0 - get ,1 - post
     */
    private int type;

    /**
     * 超时
     */
    private int timeout = 60000;

    /**
     * 是否返回 json ,默认 true
     */
    private boolean isJson = true;

    public RequestObject(String url, Map<String, String> requestParams) {
        this.url = url;
        this.simpleParams = requestParams;
    }

    public Context getContext() {
        return context;
    }

    /**
     * 此方法自带 sessionID
     *
     * @param context
     * @return
     */
    public static Map<String, String> getParamsMap(Context context) {
        /**
         * 得到一个可以进行排序的 Map ,是对字符串进行排序
         * HashMap 通过 hashcode 对其内容进行快速查找，而 TreeMap 中所有的元素都保持着某种固定的顺序
         * 如果你需要得到一个有序的结果你就应该使用 TreeMap（ HashMap 中元素的排列顺序是不固定的）
         */
        Map<String, String> map = UrlConstructor.getParamsMap();
//        map.put("sessionId", SessionUtils.extractSession(context));
//        map.put("user_id", SessionUtils.extractData(context, "user_id"));
        return map;
    }

    public static Map<String, String> getParamsMapNoSession(Context context) {
        Map<String, String> map = UrlConstructor.getParamsMap();
//        map.put("debug", "true");
//        map.put("platform", "android-" + GlobalVar.version);
//        map.put("resolution", GlobalVar.screenWidth + "x" + GlobalVar.screenHeight);
//        map.put("device", "android-" + GlobalVar.device);
        return map;
    }

    public static JSONObject getParamsMapJson(Context context) {
        JSONObject object = new JSONObject();
        return object;
    }

//	public static Map<String, String> getParamsMap() {
//		return UrlConstructor.getParamsMap();
//	}

//	public String getKey() {
//		return key;
//	}
//
//	public void setKey(String key) {
//		this.key = key;
//	}

    public void setContext(Context context) {
        this.context = context;
    }

    public String getUrlParams() {
        return urlParams;
    }

    public void setUrlParams(String urlParams) {
        this.urlParams = urlParams;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public boolean isWithCookie() {
        return withCookie;
    }

    public void setWithCookie(boolean withCookie) {
        this.withCookie = withCookie;
    }

    public boolean isUpdateCookie() {
        return updateCookie;
    }

    public void setUpdateCookie(boolean updateCookie) {
        this.updateCookie = updateCookie;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public String getCallbackParam() {
        return callbackParam;
    }

    public void setCallbackParam(String callbackParam) {
        this.callbackParam = callbackParam;
    }

    public boolean isJson() {
        return isJson;
    }

    /**
     * @param isJson , false 直接解析为 String
     */
    public void setJson(boolean isJson) {
        this.isJson = isJson;
    }

    public Map<String, String> getSimpleParams() {
        return simpleParams;
    }

    public void setSimpleParams(Map<String, String> simpleParams) {
        this.simpleParams = simpleParams;
    }

    public List<String[]> getExtraParams() {
        return extraParams;
    }

    public void setExtraParams(List<String[]> extraParams) {
        this.extraParams = extraParams;
    }
}
